package com.huan.rss.buffer;

import com.huan.rss.bean.CommonInformationItem;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingDeque;

/**
 * 爬取新闻的缓存
 */

public class NewBuffer {
    //有界阻塞队列
    private LinkedBlockingDeque<CommonInformationItem> buffer;
    //用于去重的一个map
    private ConcurrentHashMap<String,String> storedItem;//已保存的新闻id

    public NewBuffer(){
        buffer = new LinkedBlockingDeque<>();
        storedItem = new ConcurrentHashMap<>();
    }

    public void add(CommonInformationItem item){
        //去重
        if (storedItem.containsKey(item.getId())){
            return;
        }
        buffer.add(item);
        storedItem.put(item.getId(),item.getId());
        //TODO 如果爬取的数据量很大 -》大数据保存方式 -》hash算法 ，位图，布隆过滤器（redis实践）
    }

    public CommonInformationItem get() throws InterruptedException {
        //从阻塞队列中获取一个item
        return buffer.take();
    }
}
